MongoDB 4.0 では複数ドキュメントの ACID トランザクションがサポートされます
こんにちは、菊池です。
MongoDB使いのみなさん、ニュースです。
少し前になりますが、現在開発中であるMongoDBの次期メジャーバージョン4.0で、複数ドキュメントのACIDトランザクションがサポートされることがアナウンスされました。
新機能ロードマップ
上記のブログの中で、開発中機能が紹介されています。
今年の夏にリリースを予定されている、MongoDB 4.0 ではレプリカセット内でのトランザクションがサポートされるようです。他にも、Replica set point-in-time-readなんかも気になります。
シャードをまたがるトランザクションは、4.0のさらに次の、MongoDB 4.2でのサポートとなるようです。
サンプルコード
公式ドキュメントでは、先行して複数ドキュメントのトランザクションの、サンプルコードが紹介されています。
Python
client = pymongo.MongoClient(...) db = client.test s = client.start_session() s.start_transaction() try: db.inventory.update_one({"sku": "abc123"}, {"$inc": {"qty": -100}}, session=s) db.shipment.insert_one({"sku": "abc123", "qty": 100}, session=s) except Exception: s.abort_transaction() else: s.commit_transaction() s.end_session()
inventory
コレクションの更新と、shipment
コレクションへのインサートを1つのトランザクションで実行しています。これにより、2つの書き込み処理が、両方成功するか、両方とも実行されないかのいずれかになります。
トランザクションの実行イメージがよくわかりますね。
現在ベータプログラムを受付中です
MongoDB 4.0は、現在ベータプログラムを受付しています。希望する場合はこちらからサインアップしましょう。私も申し込みをしましたので、検証次第、レポートしていきたいと思います。
複数ドキュメントのトランザクションをサポートした、MongoDB 4.0は、今年の夏にリリース予定です!